package com.agileboot.attendance.domain.project.dto;

import com.agileboot.attendance.domain.project.entity.AttProjectEntity;
import com.agileboot.common.utils.bean.BeanCopyUtils;
import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.math.BigDecimal;
import java.util.Date;

/**
 * 项目DTO
 * 
 * @author ruoyi
 */
@Data
@ApiModel("项目信息")
public class ProjectDTO {

    /**
     * 项目ID
     */
    @ApiModelProperty(value = "项目ID")
    @ExcelProperty("项目ID")
    private Long projectId;

    /**
     * 项目名称
     */
    @ApiModelProperty(value = "项目名称")
    @ExcelProperty("项目名称")
    private String projectName;

    /**
     * 项目编码
     */
    @ApiModelProperty(value = "项目编码")
    @ExcelProperty("项目编码")
    private String projectCode;

    /**
     * 项目描述
     */
    @ApiModelProperty(value = "项目描述")
    @ExcelProperty("项目描述")
    private String projectDesc;

    /**
     * 项目负责人
     */
    @ApiModelProperty(value = "项目负责人")
    @ExcelProperty("项目负责人")
    private String projectManager;

    /**
     * 项目经理ID
     */
    @ApiModelProperty(value = "项目经理ID")
    private Long managerId;

    /**
     * 项目状态（0规划中、1进行中、2已完成、3已关闭）
     */
    @ApiModelProperty(value = "项目状态（0规划中、1进行中、2已完成、3已关闭）")
    private String status;
    
    /**
     * 项目状态标签
     */
    @ApiModelProperty(value = "项目状态标签")
    @ExcelProperty("状态")
    private String statusLabel;

    /**
     * 开始日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @ApiModelProperty(value = "开始日期")
    @ExcelProperty("开始日期")
    private Date startDate;

    /**
     * 结束日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @ApiModelProperty(value = "结束日期")
    @ExcelProperty("结束日期")
    private Date endDate;

    /**
     * 总预算
     */
    @ApiModelProperty(value = "总预算")
    @ExcelProperty("总预算")
    private BigDecimal totalBudget;

    /**
     * 总人月数
     */
    @ApiModelProperty(value = "总人月数")
    @ExcelProperty("总人月数")
    private BigDecimal totalManMonths;

    /**
     * 已用人月数
     */
    @ApiModelProperty(value = "已用人月数")
    @ExcelProperty("已用人月数")
    private BigDecimal usedManMonths;

    /**
     * 创建人
     */
    @ApiModelProperty(value = "创建人")
    @ExcelProperty("创建人")
    private String creatorId;

    /**
     * 创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "创建时间")
    @ExcelProperty("创建时间")
    private Date createTime;

    /**
     * 备注
     */
    @ApiModelProperty(value = "备注")
    @ExcelProperty("备注")
    private String remark;

    /**
     * 通过实体类构建DTO
     * 
     * @param entity 项目实体
     * @return 项目DTO
     */
    public static ProjectDTO fromEntity(AttProjectEntity entity) {
        if (entity == null) {
            return null;
        }
        
        ProjectDTO dto = BeanCopyUtils.copy(entity, ProjectDTO.class);
        
        // 设置状态标签
        if (dto.getStatus() != null) {
            switch (dto.getStatus()) {
                case "0":
                    dto.setStatusLabel("规划中");
                    break;
                case "1":
                    dto.setStatusLabel("进行中");
                    break;
                case "2":
                    dto.setStatusLabel("已完成");
                    break;
                case "3":
                    dto.setStatusLabel("已关闭");
                    break;
                default:
                    dto.setStatusLabel("未知");
            }
        }
        
        return dto;
    }
} 